package com.bbzn.device.client.service;

import com.bbzn.device.client.dataobject.Device;
import com.bbzn.device.client.dto.ct.data.TemplateDeviceDTO;
import com.bbzn.device.client.dto.device.*;
import com.bbzn.device.client.utils.PageInfo;

import java.util.List;
import java.util.Set;

public interface DeviceService {


    int deleteByPrimaryKey(Long id);

    int insert(Device record);

    int insertOrUpdate(Device record);

    int insertOrUpdateSelective(Device record);

    int insertSelective(Device record);

    Device selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(Device record);

    int updateByPrimaryKey(Device record);

    List<Device> findByAll(Device device);

    List<String> findByAllImeis(Long userId);

    TemplateDeviceDTO getInfoByImei(String imei);

    int updateBatch(List<Device> list);

    int updateBatchSelective(List<Device> list);

    int batchInsert(List<Device> list);

    int findCountByAll(DeviceDTO record);

    /**
     * COUNT没有去重
     *
     * @param record
     * @return
     */
    int findDevCategoryByDeviceCount(DeviceDTO record);

    /**
     * 根据IMEI更新数据
     *
     * @param record
     * @return
     */
    int updateByImeiSelective(Device record);


//    /**
//     * 根据IMEI更新数据
//     *
//     * @param record
//     * @return
//     */
//    void updateQueenByImei(Device record);

//    @PostConstruct
//    void init();

    PageInfo<Device> findPageByAll(DeviceDTO record);

    List<DeviceInfoDTO> findIndexAll(DeviceDTO record);

    int getMonthOnlineCount(DeviceDTO record);

    /**
     * 导出设备信息
     *
     * @param record
     * @return
     */
    List<Device> selectProcessBySelective(DeviceDTO record);


    /**
     * 查询推送的用户id列表
     *
     * @param record
     * @return
     */
    List<Long> getOperatorIdsBySelective(DeviceDTO record);

    /**
     * 根据imei list查询设备列表
     */
    List<Device> selectByimeis(Set<String> imeis);

    /**
     * ids list查询设备列表
     */
    List<Device> selectByIds(List<Long> ids);

    RateDTO getRateInfoByImei(String imei);

    TempDTO getTempInfoByImei(String imei);

    PressureDTO getPressureInfoByImei(String imei);

    BloodOxyDTO getBloodOxyInfoByImei(String imei);

    VoltageDTO getVoltageInfoByImei(String imei);

    HarmfulGasDTO getHarmfulGasInfoByImei(String imei);

    OutTemperatureDTO getTemperatureByImei(String imei);

    ElevationDTO getElevationByImei(String imei);

    SlotTypeDTO getSlotTypeByImei(String imei);

    GreetingDTO getGreetingInfoByImei(String imei);

    /**
     * 根据imei 查询sku
     */
    SkuDTO selectSkuByImei(String imei);

    /**
     * 获取未绑定的设备 + 带imei模糊查询
     */
    List<String> getUnUsedImei(List<Long> userIds, String imei, Long productId);

    /**
     * 根据IMEI查询设备详情信息
     *
     * @param imei
     * @return
     */
    DeviceInfoDTO selectByImei(String imei);

    /**
     * 根据动态参数查设备信息
     *
     * @param record
     * @return
     */
    PageInfo<Device> selectPageBySelective(DeviceDTO record);

    /**
     * 单个分配设备
     *
     * @param userId    当前登录的用户id
     * @param devId     设备id
     * @param receiveId 接收人id
     * @param userName  当前登录人的用户名
     * @param language  语言
     * @throws Exception
     */
    void bindCompany(Long userId, Long devId, Long receiveId, String userName, String language) throws Exception;

    /**
     * 批量分配设备
     *
     * @param userId    当前登录的用户id
     * @param devIds    设备id集合
     * @param receiveId 接收人id
     * @param userName  当前登录人的用户名
     * @param language  语言
     * @throws Exception
     */
    void bingCompanies(Long userId, List<Long> devIds, Long receiveId, String userName, String language) throws Exception;

    /**
     * 删除对应设备的所有历史记录
     *
     * @param imei
     * @throws Exception
     */
    void delDeviceByInfoAll(String imei) throws Exception;

    /**
     * 添加NB设备
     * @param userId 当前登录的用户id
     * @param reqVO 前端传的参数值-对象
     * @param userName  当前登录用户的名称
     * @param language  语言
     * @throws Exception
     */
//    void addNBDevice(Long userId, DeviceVO reqVO, String userName, String language) throws Exception;

    /**
     * 管理员强制解绑设备
     *
     * @param imei     设备号
     * @param language 语言
     * @throws Exception
     */
    void unbindDevice(String imei, String language) throws Exception;

    Device selByImei(String imei);

    String getTopicByImei(String imei);

    DevicePopupDTO selDevicePopup(String imei);

    List<DeviceCountDTO> selectFireDeviceCount(List<Long> userIds);

    List<FireIndexDTO> selectFireDevice(List<Long> userIds);


}



